<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Test_Results_Controller extends CI_Controller {

    function __construct() {
        parent::__construct();

        $this->load->model('result_model', '', true);
        $this->load->model('user', '', true);
        if (!$this->session->userdata('logged_in')) {
            redirect('login', 'refresh');
        }

        $this->load->library('authentication');
        $this->load->helper('t');
        $this->loggedUser = $this->authentication->getLoggedUser();
        $this->authentication->redirectIfNotBe(array('RSM', 'KAM'));
    }

    function index($ss_code = 'all', $title = 'all', $done = 'all') {

        $this->load->model('quiz_model', '', true);
        $this->load->model('evaluation', '', true);

        $evaluation = $this->evaluation->get_last();

        // lấy toàn bộ danh sách nhân viên, trừ ss trở lên
        $titles = array('NR' => 'NR', 'PG' => 'PG', 'BS' => 'BS', 'Medical' => 'Medical');
        $viewData['titles'] = $titles;

        $this->load->model('region');
        $regions = $this->region->get_list();
        $regionDic = array();
        foreach ($regions as $key => $value) {
            $regionDic[$value['rsm_code']] = $value['region_name'];
        }
        $viewData['regionDic'] = $regionDic;
        
        $supervisors = $this->user->get_list_by_title(array('SS'), array('status' => 'active', 'rsm_code' => $this->loggedUser->code));
        $viewData['supervisors'] = $supervisors;

        $users = array();
        if ($title != 'all') {
            $viewData['filterTitle'] = $title;
            switch ($title) {
                case 'NR':
                    $users = $this->user->get_list_by_title(array('NR', 'NRTL'), array('status' => 'active', 'rsm_code' => $this->loggedUser->code));
                    break;
                case 'PG':
                    $users = $this->user->get_list_by_title(array('PG', 'PGTL'), array('status' => 'active', 'rsm_code' => $this->loggedUser->code));
                    break;
                case 'BS':
                    $users = $this->user->get_list_by_title(array('BS', 'BSTL'), array('status' => 'active', 'rsm_code' => $this->loggedUser->code));
                    break;
                case 'Medical':
                    $users = $this->user->get_list_by_title(array('MedNR', 'MedBS', 'MedTL'), array('status' => 'active', 'rsm_code' => $this->loggedUser->code));
                    break;
            }
        } else {
            $users = $this->user->get_list_by_title(get_employee_titles(), array('status' => 'active', 'rsm_code' => $this->loggedUser->code));
        }
        if ($ss_code != 'all') {
            $temp = array();
            foreach ($users as $eachUser) {
                if ($eachUser['supervisor_code'] == $ss_code) {
                    $temp[] = $eachUser;
                }
            }
            $users = $temp;
            $viewData['filterSS'] = $ss_code;
        }


        // bài test mới nhất
        //$lastQuiz = $this->quiz_model->get_last();
        // truy vấn kết quả làm bài nếu có
        // lấy kết quả bài test mới nhất (lần làm sau cùng) của từng nhân viên
        // Chú ý: trường hợp chưa làm bài test mới nhất sẽ hiện kết quả của bài test cũ
        // => phải có id của bài test
        // bài test mới nhất
        // chưa chắc giao cho nhân viên này
        // => lấy bài test mới nhất theo nhóm
        $lastQuizNR = $this->quiz_model->get_last_of_group_and_evaluation(1, $evaluation['id']);
        $lastQuizNRTL = $this->quiz_model->get_last_of_group_and_evaluation(2, $evaluation['id']);
        $lastQuizPG = $this->quiz_model->get_last_of_group_and_evaluation(3, $evaluation['id']);
        $lastQuizPGTL = $this->quiz_model->get_last_of_group_and_evaluation(4, $evaluation['id']);
        $lastQuizBS = $this->quiz_model->get_last_of_group_and_evaluation(5, $evaluation['id']);
        $lastQuizBSTL = $this->quiz_model->get_last_of_group_and_evaluation(6, $evaluation['id']);
        $lastQuizMedNR = $this->quiz_model->get_last_of_group_and_evaluation(7, $evaluation['id']);
        $lastQuizMedBS = $this->quiz_model->get_last_of_group_and_evaluation(8, $evaluation['id']);
        $lastQuizMedTL = $this->quiz_model->get_last_of_group_and_evaluation(9, $evaluation['id']);

        $doAgain = 0;
        $numberDone = 0;
        $numberNot = 0;
        foreach ($users as &$eachUser) {
            //$eachUser['testInfo'] = $this->quiz_model->get($lastQuiz['quid']);
//            $result = $this->result_model->get_last($lastQuiz['quid'], $eachUser['id']);
//            if (count($result) > 0) {
//                $eachUser['testResult'] = $result;
//                $eachUser['testResult']['number_of_attempt'] = $this->quiz_model->get_number_of_attempt($lastQuiz['quid'], $eachUser['id']);
//            }

            $quid = 0;
            switch ($eachUser['title']) {
                case 'NR':
                    $quid = $lastQuizNR['quid'];
                    break;
                case 'NRTL':
                    $quid = $lastQuizNRTL['quid'];
                    break;
                case 'PG':
                    $quid = $lastQuizPG['quid'];
                    break;
                case 'PGTL':
                    $quid = $lastQuizPGTL['quid'];
                    break;
                case 'BS':
                    $quid = $lastQuizBS['quid'];
                    break;
                case 'BSTL':
                    $quid = $lastQuizBSTL['quid'];
                    break;
                case 'MedNR':
                    $quid = $lastQuizMedNR['quid'];
                    break;
                case 'MedBS':
                    $quid = $lastQuizMedBS['quid'];
                    break;
                case 'MedTL':
                    $quid = $lastQuizMedTL['quid'];
                    break;
            }
            $result = $this->result_model->get_last($quid, $eachUser['id']);
            $eachUser['testResult'] = $result;
            if ($result != false) {
                $eachUser['testResult']['number_of_attempt'] = $this->quiz_model->get_number_of_attempt($quid, $eachUser['id']);
            }
            $eachUser['testInfo'] = $this->quiz_model->get($quid);

            // thống kê: đã làm, chưa làm
            if($result != false)
            {
                $numberDone++;
            }
            else
            {
                $numberNot++;
            }
            
            if ($done == 'done') {
                if ($eachUser['testResult'] == false) {
                    unset($users[array_search($eachUser, $users)]);
                    continue;
                }
            } else if ($done == 'not') {
                if ($eachUser['testResult'] != false) {
                    unset($users[array_search($eachUser, $users)]);
                    continue;
                }
            }
            
            // đã có kết quả làm bài rồi, credit lớn hơn 0 => đang dc cho làm lại
            if($done != 'not' && $eachUser['credit'] > 0 && $eachUser['testResult'] != false)
            {
                $doAgain++;
            }
        }
        $viewData['filterDone'] = $done;
        $viewData['doAgain'] = $doAgain;
        $viewData['numberDone'] = $numberDone;
        $viewData['numberNot'] = $numberNot;

        // hiển thị
        $viewData['rows'] = $users;

//        $viewData['testResults'] = $this->result_model->result_list_all($limit);
//        $viewData['group_list'] = $this->result_model->group_list();
//        $viewData['quiz_list'] = $this->result_model->quiz_list();
        $viewData['title'] = "Result";
        //$viewData['lastQuiz'] = $lastQuiz;





        $this->load->view(get_folder($this->loggedUser->title) . '/test_results_list', $viewData);
    }

    function do_again() {

        $this->load->model('quiz_model', '', true);
        // kiểm tra có phải bấm nút lần 2 không ?
        // đơn giản là 1 user chỉ có 1 credit
        // nếu có 1 rồi thì không tăng nữa
        $user_id = $this->input->post('user_id');
        $quid = $this->input->post('quid');

        $user = $this->user->get($user_id);
        if ($user['credit'] > 0) { // có credit => đang dc làm lại
            redirect(get_folder($this->loggedUser->title) . '/test_results');
        } else {


            // tăng credit cho những user dc giao bài test, nhưng chưa làm
            $assignedGids = $this->quiz_model->assigned_groups($quid);
            $users = $this->user->get_list_by_title_and_group(get_employee_titles(), $assignedGids);


            // cập nhật user dc cho làm lại
            $user['credit'] = 1;
            $this->user->update($user);

            foreach ($users as &$eachUser) {
                //$eachUser['testInfo'] = $this->quiz_model->get($lastQuiz['quid']);
                $result = $this->result_model->get_last($quid, $eachUser['id']);
                if ($result == false) { // chưa làm bài lần nào
                    // không cần kiểm tra user có dc giao bài test hay ko
                    // vì chắc chắn bài user đang dc cho làm lại bài test dc giao
                    // vì ở trang kq bài test là hiển thị kết quả lần sau cùng của bài test mới nhất dc giao
                    $eachUser['credit'] = 1;
                    $this->user->update($eachUser);
                }
            }

            // CHÚ Ý: Một nhân viên cùng 1 đợt có làm 2 bài test hay ko?
            // Nếu có thì ứng dụng sẽ bị sai
            // vì trang kq bài test chỉ hiện kết quả lần sau cùng của bài test mới nhất dc giao cho nv 
            // -> ko thể hiển thị 2 bài test mới nhất cùng lúc dc giao
            // Tam thời: trong 1 đợt, 1 nv chỉ làm 1 bài test
            // cập nhật bài test
            $quiz = $this->quiz_model->get($quid);
            $quiz['test_type'] = 1;
            $quiz['credit'] = 1;
            $quiz['max_attempts'] = $quiz['max_attempts'] + 1;
            $this->quiz_model->update($quiz);

            //$this->send_mail($user['email'], $user['name'], $quiz);
            //send_mail_do_again($user['email'], $user['name'], $quiz);
        }

        redirect(get_folder($this->loggedUser->title) . '/test_results');
    }

    function get_report() {
        $logged_in = $this->session->userdata('logged_in');
        if ($logged_in['su'] != "1") {
            exit('Permission denied');
            return;
        }
        if ($this->input->post('generate')) {
            $gid = $this->input->post('gid');
            $quid = $this->input->post('quid');
            $data['report'] = $this->result_model->report($gid, $quid);
            $this->load->library('pdf');
            $this->pdf->load_view('get_report', $data);
            $this->pdf->render();
            $filename = date('Y-M-d_H:i:s', time()) . ".pdf";
            $this->pdf->stream($filename);
        } else {
            redirect('result');
        }
    }

    function user($limit = '0') {
        $logged_in = $this->session->userdata('logged_in');
        $user_id = $logged_in['id'];

        $data['result'] = $this->result_model->result_list_all($limit, $user_id);
        $data['title'] = "Result";
        $data['limit'] = $limit;
        $this->load->view('header', $data);
        $this->load->view('result_list_all', $data);
        $this->load->view('footer', $data);
    }

    function view($id, $quid = '') {
        $logged_in = $this->session->userdata('logged_in');
        // getting the last ten result of all users of particular quiz
        $last_ten_result = $this->result_model->last_ten_result($quid);
        $value = array();
        $value[] = array('Quiz Name', 'Percentage (%)');
        foreach ($last_ten_result as $val) {
            $value[] = array($val['username'] . ' (' . $val['first_name'] . " " . $val['last_name'] . ')', intval($val['percentage']));
        }
        $data['value'] = json_encode($value);


        if ($logged_in['su'] == "1") {
            $data['result'] = $this->result_model->result_view($id);
        } else {
            $user_id = $logged_in['id'];
            $data['result'] = $this->result_model->result_view($id, $user_id);
        }


        // getting the individual question time
        $qtime = array();
        $qtime[] = array('Question Number', 'Time in Seconds');
        foreach (explode(",", $data['result']->time_spent_ind) as $key => $val) {
            $qtime[] = array("Q " . ($key + 1) . ")", intval($val));
        }
        $data['qtime'] = json_encode($qtime);

        $data['title'] = "Result";

        $this->load->view('header', $data);
        $this->load->view('result_view', $data);
        $this->load->view('footer', $data);
    }

    function view_answer($id) {
        $data['result'] = $this->result_model->result_view($id);
        $data['assigned_question'] = $this->result_model->get_question($id);
        $data['title'] = "Result";
        $data['id'] = $id;
        $this->load->view('header', $data);
        $this->load->view('view_answer', $data);
        $this->load->view('footer', $data);
    }

    function send_mail($emailAddress, $name, $quizInfo) {
        $this->load->library('My_PHPMailer');
        $mail = new PHPMailer();
        $mail->CharSet = 'UTF-8';
        $mail->IsSMTP(); // we are going to use SMTP
        $mail->SMTPAuth = true; // enabled SMTP authentication
        $mail->SMTPSecure = "ssl";  // prefix for secure protocol to connect to the server
        $mail->Host = "smtp.gmail.com";      // setting GMail as our SMTP server
        //$mail->SMTPDebug  = 2;
        $mail->Port = 465;                   // SMTP port to connect to GMail 465 26
        $mail->Username = "tam.luchan@gmail.com";  // user email address
        $mail->Password = "krrahfkpgujryyij";            // password in GMail

        $mail->SetFrom('tam.luchan@gmail.com', 'Lữ Chân Tâm');  //Who is sending the email
        $mail->AddReplyTo("tam.luchan@gmail.com", "Lữ Chân Tâm");  //email address that receives the response

        $mail->Subject = "Fonterra - Cho Phép Làm Lại Bài Trắc Nghiệm";
        $mail->Body = "Bạn đã được cho phép làm lại bài trắc nghiệm, " . $quizInfo['quiz_name'] . ".";
        $mail->AltBody = "Bạn đã được cho phép làm lại bài trắc nghiệm, " . $quizInfo['quiz_name'] . ".";

        $destino = $emailAddress; // Who is addressed the email to
        $mail->AddAddress($destino, $name);

//        $mail->AddAttachment("images/phpmailer.gif");      // some attached files
//        $mail->AddAttachment("images/phpmailer_mini.gif"); // as many as you want
        if (!$mail->Send()) {
            $message = "Error: " . $mail->ErrorInfo;
        } else {
            $message = "Message sent correctly!";
        }
        return $message;
        //$this->load->view('sent_mail',$data);
    }

}

?>
